package practice;

/**
 * 进⾏普通⽂件的复制
 */

import java.io.*;
import java.util.Scanner;

/**
 * 1。让用户输入想要复制的文件路径、
 * 2.检验文件是否存在，且是一个文件
 * 3.让用户输入复制文件后存放的路径
 * 4.检验路径是否存在同一目录
 * 5.如果不是同一个目录，直接创建新文件
 * 6.如果是同一个目录，询问用户是否要覆盖原来的文件创建新的文件
 * 7.选择覆盖就删除后，创建新的文件，不覆盖就不进行操作
 */
public class DEMO_02 {
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你想要复制的文件路径");
        String path = scanner.nextLine();
        File file = new File(path);
        if (!file.exists()) {
            System.out.println("文件不存在");
            return;
        }
        if (!file.isFile()) {
            System.out.println("你输入不是一个文件路径");
            return;
        }
        System.out.println("请输入你想要复制到的路径");
        String targetPath = scanner.nextLine();
        File targetFile = new File(targetPath);
        if (targetFile.getCanonicalFile().equals(file.getCanonicalFile())) {

            System.out.println("你想要复制到的路径与原路径在同一目录下是否要选择覆盖 Y：YES N：NO");
            String isDelete = scanner.nextLine();
            if (isDelete.toLowerCase().equals("y")) {
                File temp=new File("D:/temp/temp.txt");
                copy(file,temp);
                file.delete();
                copy(temp,targetFile);
                System.out.println("覆盖成功");
                temp.delete();

            } else if (isDelete.toLowerCase().equals("n")) {
                System.out.println("不进行任何操作");
            } else {
                System.out.println("输入不合法");
            }
        } else {
            copy(file,targetFile);
            System.out.println("创建成功");
        }
        scanner.close();

    }

    private static void copy(File file, File targetFile) throws IOException {
        InputStream inputStream = new FileInputStream(file);
        byte[] bytes = new byte[1024];
        OutputStream outputStream = new FileOutputStream(targetFile);
        while (true) {
            int len = inputStream.read(bytes);
            if (len == -1) break;
            for (int i = 0; i < len; i++) {
                outputStream.write(bytes, 0, len);
            }
            outputStream.flush();
        }
        inputStream.close();
        outputStream.close();
    }
}
